home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 1 / Cream of the Crop 1.iso / PROGRAM / NTUMIN10.ARJ / REDUCE.C < prev    next >
C/C++ Source or Header  |  1992-03-12  |  3KB  |  102 lines

  1. /******************************************************************************
  2.  *
  3.  *    Program Name : REDUCE.C
  4.  *
  5.  *    Written By : Eng-Huat Ong and Kian-Mong Low.
  6.  *
  7.  *    This program removes the same minterms that are in array-c from
  8.  *    that in the b-array. The b-array is then shrinked.
  9.  *
  10.  *    Returns pointer to an array consisting of :
  11.  *        1.    index pointer to the b-array, i
  12.  *        2.      the reduced b-array
  13.  *
  14.  * --------------------------------------------------------------------------
  15.  *    Copyright (c) 1992. All Rights Reserved. Nanyang Technological
  16.  *    University.
  17.  *
  18.  *    You are free to use, copy and distribute this software and its
  19.  *    documentation providing that:
  20.  *
  21.  *        NO FEE IS CHARGED FOR USE, COPYING OR DISTRIBUTION.
  22.  *
  23.  *        IT IS NOT MODIFIED IN ANY WAY.
  24.  *
  25.  *        THE COPYRIGHT NOTICE APPEAR IN ALL COPIES.
  26.  *
  27.  *    This program is provided "AS IS" without any warranty, expressed or
  28.  *    implied, including but not limited to fitness for any particular
  29.  *    purpose.
  30.  *
  31.  *    If you find NTUMIN fast, easy, and useful, a note or comment would be
  32.  *    appreciated. Please send to:
  33.  *
  34.  *        Boon-Tiong Tan or Othman Bin Ahmad
  35.  *        School of EEE
  36.  *        Nanyang Technological University
  37.  *        Nanyang Avenue
  38.  *        Singapore 2263
  39.  *        Republic of Singapore
  40.  *
  41.  *****************************************************************************/
  42.  
  43. #include <stdio.h>
  44. #include <stdlib.h>
  45. #include <string.h>
  46. #define   mask8 255
  47.  
  48. unsigned char      *reduce(c, b, pos)
  49. unsigned short     pos;
  50. unsigned char      *b, *c;
  51.  
  52. {
  53.    unsigned short  mb, samepos, adj, i, j;
  54.    unsigned char   nspm;
  55.    int             test;
  56.  
  57.    adj = *(c+2)<<8 | *(c+1);            /* no. of adj terms or (SSM terms-1) */
  58.    nspm = *(b+3);                       /* no. of storage/minterm */
  59.    mb = *(b+2)<<8 | *(b+1);             /* no. of ON minterm */
  60.    samepos = 0;                         /* an indicator */
  61.  
  62.    for (i=0; i<=adj; i++)               /* do for all minterms in c-array */
  63.       {
  64.      for (j=0; j<mb; j++)           /* do for all minterms in b-array */
  65.         {
  66.            test = memcmp((b+4+nspm*j),(c+4+nspm*i),nspm); /* present ? */
  67.  
  68.            if (test==0)     /* minterm in c-array present in b-array */
  69.           {
  70.              memcpy((b+4+nspm*j),(b+4+nspm*(j+1)),(mb-1-j)*nspm);  /* remove minterm */
  71.  
  72.              b = (unsigned char *) realloc (b, 4+nspm*mb);  /* reduce space in b */
  73.              if (b==0)
  74.             {
  75.                printf("Out of memory -- REDUCE, *b\n");
  76.                printf("Program terminated - 1 \n");
  77.                exit(0);
  78.             }
  79.              mb--;                 /* no. of minterms in b-array */
  80.  
  81.              if (j<pos)
  82.             pos--;             /* decrement index pointer */
  83.              if (j==pos)
  84.             samepos++;         /* an indicator */
  85.  
  86.              break;
  87.           }
  88.         }
  89.     }
  90.      *(b+1) = mb & mask8;    /* reduced no. of minterms */
  91.      *(b+2) = mb>>8;
  92.  
  93.      if (samepos>0)         /* indicator is true */
  94.     *b = pos-1;         /* index pointer returned */
  95.      else
  96.     *b = pos;           /* index pointer of b-array, next i */
  97.      return (b);            /* return reduced b-array */
  98. }
  99.  
  100.  
  101.  
  102.